iT邦幫忙

1

在 Git 中如何將一個Commit的內容貼到舊的Commit中但不要提交

git
  • 分享至 

  • xImage
  •  

會有這個需求是因為我在修改前人的專案,然後發現在茫茫大海中指引我的,是VS Code旁邊顯示我做過哪些更改,但git還沒儲存的標記。
https://ithelp.ithome.com.tw/upload/images/20230417/20140925IU4Q1vDlyV.png

我需要這些...所以產生了需求!

總之,結論就是先大膽Commit目前更新的內容,可以順便取個版本tag(假設這版叫2.0.1)。

git add .
git commit -m "修改了ABC..."
git tag v2.0.1

接著切換到舊節點開新分支,此處的舊節點就是前一個節點所以直接用HEAD^即可,否則也可以用commit的hash編號代替,然後-b的參數可以直接開新分支(這裡命名分支為workCompare)。

git checkout HEAD^ -b workCompare

然後這裡就是關鍵,使出git cherry-pick --no-commit 要移過來的commit編號或分支,這裡的--no-commit會讓移過來的內容不要被commit,而是只加入到暫存區(add)而已。
(--no-commit也可以用-n代替)

git cherry-pick -n v2.0.1

最後用git status確認一下狀態是加入了暫存區,所以再用git restore --staged .把所有檔案還原回工作區,VS Code的標記就會開心地回來了~

git status
git restore --staged .

缺點是過程中弄得有點雜亂,如果VS Code有設定或外掛可以指定讓旁邊的標記顯示跟哪個版本的比對,感覺才是最好的解,或許有天找到了再來更新文章。

參考資料:
【狀況題】如果你只想要某個分支的某幾個 Commit?


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言